home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / unix / volume10 / ease / part01 next >
Encoding:
Internet Message Format  |  1987-07-09  |  62.3 KB

  1. Path: uunet!rs
  2. From: rs@uunet.UU.NET (Rich Salz)
  3. Newsgroups: comp.sources.unix
  4. Subject: v10i051:  Ease translator repost, Part01/04
  5. Message-ID: <619@uunet.UU.NET>
  6. Date: 10 Jul 87 11:18:09 GMT
  7. Organization: UUNET Communications Services, Arlington, VA
  8. Lines: 2135
  9. Approved: rs@uunet.UU.NET
  10.  
  11. Submitted-by: Wombat <rsk@j.cc.purdue.edu>
  12. Posting-Number: Volume 10, Issue 51
  13. Archive-name: ease/Part01
  14.  
  15. [  I FTP'd a copy of this from Purdue, packed it up, and am posting
  16.    it -- the one from last time I hopelessly mangled.  --r$  ]
  17.  
  18. #! /bin/sh
  19. # This is a shell archive.  Remove anything before this line, then unpack
  20. # it by saving it into a file and typing "sh file".  To overwrite existing
  21. # files, type "sh file -c".  You can also feed this as standard input via
  22. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  23. # will see the following message at the end:
  24. #        "End of archive 1 (of 4)."
  25. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  26. if test -f 'MANIFEST' -a "${1}" != "-c" ; then 
  27.   echo shar: Will not clobber existing file \"'MANIFEST'\"
  28. else
  29. echo shar: Extracting \"'MANIFEST'\" \(2025 characters\)
  30. sed "s/^X//" >'MANIFEST' <<'END_OF_FILE'
  31. X   File Name        Archive #    Description
  32. X-----------------------------------------------------------
  33. X MANIFEST                  1    
  34. X config-files              1    
  35. X config-files/FINIS        1    
  36. X config-files/FINIS/Makefile 1    
  37. X config-files/FINIS/base.cpp 3    
  38. X config-files/FINIS/berkhosts.cpp 1    
  39. X config-files/FINIS/berkm.cpp 1    
  40. X config-files/FINIS/compat.cpp 1    
  41. X config-files/FINIS/localhosts.cpp 1    
  42. X config-files/FINIS/localm.cpp 1    
  43. X config-files/FINIS/pclm.cpp 1    
  44. X config-files/FINIS/phonenethosts.cpp 1    
  45. X config-files/FINIS/pucc-h.mc 1    
  46. X config-files/FINIS/pucc-i.mc 1    
  47. X config-files/FINIS/pucc-j.mc 2    
  48. X config-files/FINIS/puccbase.cpp 1    
  49. X config-files/FINIS/version.cpp 1    
  50. X config-files/FINIS/zerobase.cpp 1    
  51. X config-files/KEY          1    
  52. X config-files/README       1    
  53. X config-files/pucc-k.mc    1    
  54. X config-files/pucc-n.mc    1    
  55. X config-files/pucc-s.mc    1    
  56. X config-files/puccbase.cpp 1    
  57. X config-files/stat-l.mc    1    
  58. X config-files/tcpm.cpp     1    
  59. X doc                       1    
  60. X doc/Makefile              1    
  61. X doc/ap1                   1    
  62. X doc/ap2                   1    
  63. X doc/ap3                   1    
  64. X doc/cover                 1    
  65. X doc/ease.paper            4    
  66. X maketd                    1    
  67. X maketd/Makefile           1    
  68. X maketd/Manual             1    
  69. X maketd/Manual/maketd.1l   2    
  70. X maketd/Manual/nshpopen.3l 2    
  71. X maketd/Manual/srtunq.3l   2    
  72. X maketd/README             1    
  73. X maketd/abrv.c             3    
  74. X maketd/abrv.h             1    
  75. X maketd/breakargs.c        2    
  76. X maketd/maketd.c           4    
  77. X maketd/maketd.h           1    
  78. X maketd/maketd.sh          2    
  79. X maketd/misc.c             2    
  80. X maketd/nshpopen.c         1    
  81. X maketd/nshpopen.h         1    
  82. X maketd/srtunq.c           2    
  83. X maketd/srtunq.h           1    
  84. X src                       1    
  85. X src/Makefile              1    
  86. X src/emitcf.c              3    
  87. X src/errors.c              2    
  88. X src/idman.c               2    
  89. X src/lexan.l               2    
  90. X src/main.c                2    
  91. X src/parser.y              3    
  92. X src/strops.c              3    
  93. X src/symtab.c              2    
  94. X src/symtab.h              1    
  95. END_OF_FILE
  96. if test 2025 -ne `wc -c <'MANIFEST'`; then
  97.     echo shar: \"'MANIFEST'\" unpacked with wrong size!
  98. fi
  99. # end of 'MANIFEST'
  100. fi
  101. if test -f 'config-files/FINIS/Makefile' -a "${1}" != "-c" ; then 
  102.   echo shar: Will not clobber existing file \"'config-files/FINIS/Makefile'\"
  103. else
  104. echo shar: Extracting \"'config-files/FINIS/Makefile'\" \(1283 characters\)
  105. sed "s/^X//" >'config-files/FINIS/Makefile' <<'END_OF_FILE'
  106. X######################################################################
  107. X#
  108. X#    Makefile for Sendmail PUCC configuration files
  109. X#
  110. X#    $Id: Makefile,v 1.4 86/04/04 14:16:17 kcs Exp $
  111. X#
  112. X######################################################################
  113. X
  114. X
  115. XPUCCSRCS=pucc-h.mc \
  116. X    pucc-i.mc \
  117. X    pucc-j.mc \
  118. X    pucc-k.mc \
  119. X    stat-l.mc \
  120. X    pucc-n.mc \
  121. X    pucc-s.mc
  122. X
  123. XGENSRCS=base.cpp \
  124. X    berkhosts.cpp \
  125. X    berkm.cpp \
  126. X    compat.cpp \
  127. X    localhosts.cpp \
  128. X    localm.cpp \
  129. X    pclm.cpp \
  130. X    puccbase.cpp \
  131. X    tcpm.cpp \
  132. X    version.cpp \
  133. X    zerobase.cpp
  134. X
  135. XSRCS=    $(GENSRCS) $(PUCCSRCS)
  136. X
  137. XPUCCALL=pucc-h.cf \
  138. X    pucc-i.cf \
  139. X    pucc-j.cf \
  140. X    pucc-k.cf \
  141. X    stat-l.cf \
  142. X    pucc-n.cf \
  143. X    pucc-s.cf
  144. X
  145. XALL=    $(PUCCALL)
  146. X
  147. X
  148. X.SUFFIXES: .mc .cf
  149. X
  150. X.mc.cf:
  151. X    /lib/cpp $*.mc > $*.cf
  152. X
  153. Xall: $(ALL)
  154. X
  155. X############################
  156. X#   special dependencies   #
  157. X############################
  158. X
  159. X# pessimize -- basic dependencies
  160. X$(ALL): base.cpp berkhosts.cpp localm.cpp localhosts.cpp pclm.cpp puccbase.cpp \
  161. X    version.cpp zerobase.cpp
  162. X
  163. X# hosts on berknet
  164. Xpucc-h.cf: berkm.cpp
  165. X
  166. X# hosts on the arpanet
  167. Xpucc-j.cf: tcpm.cpp
  168. X
  169. X# hosts on csnet
  170. Xpucc-j.cf: phonenethosts.cpp
  171. X
  172. X# mailers requiring backwards compatibility
  173. Xberkm.cpp tcpm.cpp: compat.cpp
  174. X
  175. X#####################
  176. X#   administrivia   #
  177. X#####################
  178. X
  179. Xsources: $(SRCS)
  180. X
  181. Xclean:
  182. X    rm -f $(ALL) a.out core errs
  183. END_OF_FILE
  184. if test 1283 -ne `wc -c <'config-files/FINIS/Makefile'`; then
  185.     echo shar: \"'config-files/FINIS/Makefile'\" unpacked with wrong size!
  186. fi
  187. # end of 'config-files/FINIS/Makefile'
  188. fi
  189. if test -f 'config-files/FINIS/berkhosts.cpp' -a "${1}" != "-c" ; then 
  190.   echo shar: Will not clobber existing file \"'config-files/FINIS/berkhosts.cpp'\"
  191. else
  192. echo shar: Extracting \"'config-files/FINIS/berkhosts.cpp'\" \(576 characters\)
  193. sed "s/^X//" >'config-files/FINIS/berkhosts.cpp' <<'END_OF_FILE'
  194. X/***********************************************************
  195. X ***********************************************************
  196. X ****
  197. X ****    Berknet Host List
  198. X ****
  199. X ****    $Id: berkhosts.cpp,v 1.4 85/07/21 22:15:14 acu Exp Locker: acu $
  200. X ****
  201. X ***********************************************************
  202. X ***********************************************************/
  203. X
  204. Xclass
  205. X    berkhosts = { C, pucc-c, puccc, 
  206. X              D, pucc-d, puccd,
  207. X              E, pucc-e, pucce,
  208. X              X, asterix, library, libr,
  209. X              W, physics, pur-phy, phy-a, 
  210. X              physics-galileo, purdue-galileo, galileo };
  211. X
  212. END_OF_FILE
  213. if test 576 -ne `wc -c <'config-files/FINIS/berkhosts.cpp'`; then
  214.     echo shar: \"'config-files/FINIS/berkhosts.cpp'\" unpacked with wrong size!
  215. fi
  216. # end of 'config-files/FINIS/berkhosts.cpp'
  217. fi
  218. if test -f 'config-files/FINIS/berkm.cpp' -a "${1}" != "-c" ; then 
  219.   echo shar: Will not clobber existing file \"'config-files/FINIS/berkm.cpp'\"
  220. else
  221. echo shar: Extracting \"'config-files/FINIS/berkm.cpp'\" \(1211 characters\)
  222. sed "s/^X//" >'config-files/FINIS/berkm.cpp' <<'END_OF_FILE'
  223. X/***********************************************************
  224. X ***********************************************************
  225. X ****
  226. X ****    Berknet Mailer specification
  227. X ****
  228. X ****    $Id: berkm.cpp,v 1.4 85/07/10 22:32:07 acu Exp $
  229. X ****
  230. X ***********************************************************
  231. X ***********************************************************/
  232. X
  233. X#ifdef cppCOMPAT
  234. X#include "compat.cpp"
  235. X#endif
  236. X
  237. Xmailer
  238. X    berk {
  239. X        Path    = "/usr/net/bin/sendberkmail",
  240. X        Flags    = { f_ffrom, f_strip, f_date, f_from, f_mesg, f_addrw };
  241. X        Sender  = BERKSEND_RW;
  242. X        Recipient = BERKREC_RW;
  243. X        Argv    = "sendberkmail -m ${m_rhost} -h ${m_hops} -t ${m_ruser}";
  244. X        Maxsize    = "25000"
  245. X    };
  246. X
  247. Xruleset BERKSEND_RW {
  248. X
  249. X    if ( path )
  250. X        next ( OLDSTYLE_RW ( $1 ) );        /* convert to old style */
  251. X    if ( hostname:usr )
  252. X        return ( $1:$2);            /* old berknet as is */
  253. X
  254. X    if ( path < @path > )
  255. X        return ( $1<@$2> );            /* don't modify arpanet */
  256. X
  257. X    if ( hostname!usr )
  258. X        return ( $1!$2 );            /* don't modify uucp */
  259. X
  260. X    if ( < @path > )
  261. X        return ( <@$1> );            /* don't modify <routeaddr> */
  262. X
  263. X    if ( path )
  264. X        return ( $m_shostname:$1 );        /* make others relative */
  265. X
  266. X}
  267. X
  268. X
  269. Xruleset BERKREC_RW {
  270. X
  271. X    if ( path )
  272. X        next ( OLDSTYLE_RW ( $1 ) );        /* convert to old style */
  273. X
  274. X}
  275. END_OF_FILE
  276. if test 1211 -ne `wc -c <'config-files/FINIS/berkm.cpp'`; then
  277.     echo shar: \"'config-files/FINIS/berkm.cpp'\" unpacked with wrong size!
  278. fi
  279. # end of 'config-files/FINIS/berkm.cpp'
  280. fi
  281. if test -f 'config-files/FINIS/compat.cpp' -a "${1}" != "-c" ; then 
  282.   echo shar: Will not clobber existing file \"'config-files/FINIS/compat.cpp'\"
  283. else
  284. echo shar: Extracting \"'config-files/FINIS/compat.cpp'\" \(843 characters\)
  285. sed "s/^X//" >'config-files/FINIS/compat.cpp' <<'END_OF_FILE'
  286. X/***********************************************************
  287. X ***********************************************************
  288. X ****
  289. X ****    Provide Backward Compatibility
  290. X ****
  291. X ****    $Id: compat.cpp,v 1.4 85/11/24 22:46:32 acu Exp $
  292. X ****
  293. X ***********************************************************
  294. X ***********************************************************/
  295. X
  296. X#define cppCOMPAT 4.2
  297. X
  298. Xfield
  299. X    berkhost: match (1) in berkhosts;
  300. X
  301. X/***************************************************
  302. X * General code to convert back to old style names *
  303. X ***************************************************/
  304. X
  305. Xruleset OLDSTYLE_RW {
  306. X
  307. X    if ( usr < @berkhost > )
  308. X        return ( $2:$1 );            /* u@bhost => h:u */
  309. X
  310. X    if ( usr < @hostname ".UUCP" > )
  311. X        retry ( $2!$1 );            /* u@host.UUCP => host!u */
  312. X
  313. X    if ( usr @ hostpath ".ARPA" )
  314. X        retry ( $1@$2 );            /* u@host.ARPA => u@host */
  315. X
  316. X}
  317. END_OF_FILE
  318. if test 843 -ne `wc -c <'config-files/FINIS/compat.cpp'`; then
  319.     echo shar: \"'config-files/FINIS/compat.cpp'\" unpacked with wrong size!
  320. fi
  321. # end of 'config-files/FINIS/compat.cpp'
  322. fi
  323. if test -f 'config-files/FINIS/localhosts.cpp' -a "${1}" != "-c" ; then 
  324.   echo shar: Will not clobber existing file \"'config-files/FINIS/localhosts.cpp'\"
  325. else
  326. echo shar: Extracting \"'config-files/FINIS/localhosts.cpp'\" \(1906 characters\)
  327. sed "s/^X//" >'config-files/FINIS/localhosts.cpp' <<'END_OF_FILE'
  328. X/***********************************************************
  329. X ***********************************************************
  330. X **** 
  331. X ****    Campus Host List
  332. X ****
  333. X ****    $Id: localhosts.cpp,v 1.3 85/06/26 16:10:15 acu Exp $
  334. X ****
  335. X ***********************************************************
  336. X ***********************************************************/
  337. X
  338. Xclass
  339. X    campushosts = { pucc-c, c, puccc,
  340. X            pucc-d, d, puccd,
  341. X            pucc-e, e, pucce,
  342. X            pucc-h, h, pucch,
  343. X            pucc-i, i, pucci,
  344. X            pucc-j, j, puccj, pucc,
  345. X            pucc-k, k, pucck,
  346. X            pucc-n, n, puccn,
  347. X            stat-l, l, statl, stat,
  348. X            purdue-arthur, arthur, purdue, purdue-cs,
  349. X            purdue-merlin, merlin,
  350. X            purdue-mordred, mordred, cs,
  351. X            purdue-bmec, purdue-ecn-bmec, ecn-bmec, bmec,
  352. X            purdue-chem, purchem, chemistry, purdue-chemistry,
  353. X            purdue-dipl, ecn-dipl, dipl,
  354. X            purdue-ecn-ca, ecn-ca, ca, ca-en,
  355. X            purdue-ecn-cb, ecn-cb, cb, cb-en,
  356. X            purdue-ecn-ec, ecn-ec, ec, ec-en,
  357. X            purdue-ecn-ed, ecn-ed, ed, ed-en,
  358. X            purdue-ecn-ee, ecn-ee, ee, ee-en, pur-ee, ecn, purdue-ecn,
  359. X            purdue-ecn-ef, ecn-ef, ef, ef-en,
  360. X            purdue-ecn-ef, ecn-ef, ef, ef-rsch,
  361. X            purdue-ecn-eg, ecn-eg, eg, eg-en,
  362. X            purdue-ecn-eh, ecn-eh, eh, eh-en, ecn-test,
  363. X            purdue-ecn-ei, ecn-ei, ei, ei-en,
  364. X            purdue-ecn-ej, ecn-ej, ej, ej-en,
  365. X            purdue-ecn-ek, ecn-ek, ek, ek-en,
  366. X            purdue-ecn-ga, ecn-ga, ga, ga-en,
  367. X            purdue-ecn-gb, ecn-gb, gb, gb-en,
  368. X            purdue-ecn-ma, ecn-ma, ma, ma-en,
  369. X            purdue-ecn-mb, ecn-mb, mb, mb-en,
  370. X            purdue-ecn-md, ecn-md, md, md-en,
  371. X            purdue-ecn-pb, ecn-pb, pb, pb-en, cidmac,
  372. X            purdue-ecn-pc, ecn-pc, pc, pc-en,
  373. X            purdue-galileo, galileo, physics-galileo,
  374. X            purdue-malcolm, ecn-malcolm, malcolm,
  375. X            purdue-newton, newton, physics-newton,
  376. X            purdue-trillian, ecn-trillian, trillian,
  377. X            purdue-vlsi, puvlsi, vlsi,
  378. X            purdue-zaphod, ecn-zaphod, zaphod };
  379. X
  380. X    /* non-standard names for CS hosts (translated to CS) */
  381. X
  382. X    othercs = { cs-arthur, cs-mordred, cs-merlin };
  383. END_OF_FILE
  384. if test 1906 -ne `wc -c <'config-files/FINIS/localhosts.cpp'`; then
  385.     echo shar: \"'config-files/FINIS/localhosts.cpp'\" unpacked with wrong size!
  386. fi
  387. # end of 'config-files/FINIS/localhosts.cpp'
  388. fi
  389. if test -f 'config-files/FINIS/localm.cpp' -a "${1}" != "-c" ; then 
  390.   echo shar: Will not clobber existing file \"'config-files/FINIS/localm.cpp'\"
  391. else
  392. echo shar: Extracting \"'config-files/FINIS/localm.cpp'\" \(893 characters\)
  393. sed "s/^X//" >'config-files/FINIS/localm.cpp' <<'END_OF_FILE'
  394. X/***********************************************************
  395. X ***********************************************************
  396. X ****
  397. X ****    Local and Program Mailer specification
  398. X ****
  399. X ****    $Id: localm.cpp,v 1.4 85/07/10 22:38:09 acu Exp $
  400. X ****
  401. X ***********************************************************
  402. X ***********************************************************/
  403. X
  404. Xmailer
  405. X    local {
  406. X        Path     = "/bin/mail",
  407. X        Flags    = { f_rfrom, f_locm, f_strip, f_date, f_from,
  408. X                f_mesg, f_mult, f_noufrom },
  409. X        Sender    = MAGIC_RW,
  410. X        Recipient = UNIMPLEMENTED,
  411. X        Argv    = "mail -d ${m_ruser}",
  412. X        Maxsize    = "200000"
  413. X    };
  414. X
  415. X    prog {
  416. X        Path    = "/bin/sh",
  417. X        Flags    = { f_locm, f_strip, f_date, f_from, f_mesg, f_upperu },
  418. X        Sender    = MAGIC_RW,
  419. X        Recipient = UNIMPLEMENTED,
  420. X        Argv    = "sh -c ${m_ruser}",
  421. X        Maxsize    = "200000"
  422. X    };
  423. X
  424. X
  425. Xruleset MAGIC_RW {
  426. X
  427. X    if ( @ )
  428. X        return ( "MAILER-DAEMON" );    /* errors to mailer-daemon */
  429. X
  430. X}
  431. END_OF_FILE
  432. if test 893 -ne `wc -c <'config-files/FINIS/localm.cpp'`; then
  433.     echo shar: \"'config-files/FINIS/localm.cpp'\" unpacked with wrong size!
  434. fi
  435. # end of 'config-files/FINIS/localm.cpp'
  436. fi
  437. if test -f 'config-files/FINIS/pclm.cpp' -a "${1}" != "-c" ; then 
  438.   echo shar: Will not clobber existing file \"'config-files/FINIS/pclm.cpp'\"
  439. else
  440. echo shar: Extracting \"'config-files/FINIS/pclm.cpp'\" \(995 characters\)
  441. sed "s/^X//" >'config-files/FINIS/pclm.cpp' <<'END_OF_FILE'
  442. X/****************************************************************************
  443. X ****************************************************************************
  444. X ****
  445. X ****    PCL11 Mailer specification
  446. X ****
  447. X ****    Messages processed by this configuration are assumed to remain
  448. X ****    in the same domain.  Hence, they may not necessarily correspond
  449. X ****    to RFC822 in all details.
  450. X ****
  451. X ****    $Id: pclm.cpp,v 1.4 85/06/26 15:10:46 acu Exp $
  452. X ****
  453. X ****************************************************************************
  454. X ****************************************************************************/
  455. X
  456. Xmailer
  457. X    pcl {
  458. X        Path    = "[IPC]",
  459. X        Flags    = { f_mult, f_date, f_from, f_mesg, f_upperu, 
  460. X                f_addrw, f_dot, f_smtp },
  461. X        Sender    = HOSTNAME_RW,
  462. X        Recipient = HOSTNAME_RW,
  463. X        Argv    = "IPC ${m_rhost}",
  464. X        Maxsize = "100000"
  465. X    };
  466. X
  467. Xruleset HOSTNAME_RW {
  468. X
  469. X    if ( anypath < @path > anypath )
  470. X        return ( $1<@$2>$3 );            /* already ok */
  471. X
  472. X    if ( path )
  473. X        return ( $1<@$m_sitename );        /* tack on our hostname */
  474. X
  475. X}
  476. END_OF_FILE
  477. if test 995 -ne `wc -c <'config-files/FINIS/pclm.cpp'`; then
  478.     echo shar: \"'config-files/FINIS/pclm.cpp'\" unpacked with wrong size!
  479. fi
  480. # end of 'config-files/FINIS/pclm.cpp'
  481. fi
  482. if test -f 'config-files/FINIS/phonenethosts.cpp' -a "${1}" != "-c" ; then 
  483.   echo shar: Will not clobber existing file \"'config-files/FINIS/phonenethosts.cpp'\"
  484. else
  485. echo shar: Extracting \"'config-files/FINIS/phonenethosts.cpp'\" \(1481 characters\)
  486. sed "s/^X//" >'config-files/FINIS/phonenethosts.cpp' <<'END_OF_FILE'
  487. X/*******************************************************
  488. X *******************************************************
  489. X ****
  490. X ****    Phonenet Host List
  491. X ****
  492. X ****    Mail to these sites should be routed
  493. X ****    through csnet-relay.
  494. X ****
  495. X ****    $Id: phonenethosts.cpp,v 1.3 85/07/10 22:37:28 acu Exp $
  496. X ****
  497. X *******************************************************
  498. X *******************************************************/
  499. X
  500. Xclass
  501. X    phonehosts = { albany, alcoa-atc, alcoa-sei, arizona, asu, bostonu,
  502. X               boulder, brandeis, brown, brown-cogsci, btl, buffalo,
  503. X               canisius, carleton, case, clemson, colgate, colostate,
  504. X               ct, dartmouth, depaul, digital, duke, emory, france,
  505. X               gatech, georgetown, germany, gmr, gte-labs, houston,
  506. X               hplabs, ibm-sj, icase, indiana, iowa-state, israel, jhu,
  507. X               kaist, kansas-state, kent, lsu, mcnc, mtu, ncar, nmsu,
  508. X               nmt, northeastern, nsf-cs, nwu, ohio-state, okstate,
  509. X               oregon-grad, oregon-state, penn-state, pitt, portland,
  510. X               princeton, rit, rpi, scarolina, smu, src, suny-bing,
  511. X               suny-sb, syr, tamu, tektronix, ti-csl, ti-eg, toronto,
  512. X               tufts, tulane, uab, ubc, ucd, ucf, uchicago, uconn, 
  513. X               ucsb, ucsc, udenver, ufl, uhcl, uiowa, ukans, ulowell,
  514. X               umass, umass-boston, umich, umiss, umn-cs, unc, unh,
  515. X               unl, unlv, uno, uoregon, upenn, usc-cse, usl, utd,
  516. X               utenn, uvm, uwm, vanderbilt, virginia, vpi, wang-inst,
  517. X               waterloo, williams, wfu, wright, wsu };
  518. END_OF_FILE
  519. if test 1481 -ne `wc -c <'config-files/FINIS/phonenethosts.cpp'`; then
  520.     echo shar: \"'config-files/FINIS/phonenethosts.cpp'\" unpacked with wrong size!
  521. fi
  522. # end of 'config-files/FINIS/phonenethosts.cpp'
  523. fi
  524. if test -f 'config-files/FINIS/pucc-h.mc' -a "${1}" != "-c" ; then 
  525.   echo shar: Will not clobber existing file \"'config-files/FINIS/pucc-h.mc'\"
  526. else
  527. echo shar: Extracting \"'config-files/FINIS/pucc-h.mc'\" \(2042 characters\)
  528. sed "s/^X//" >'config-files/FINIS/pucc-h.mc' <<'END_OF_FILE'
  529. X/***********************************************************
  530. X ***********************************************************
  531. X ****
  532. X ****    SENDMAIL CONFIGURATION FILE
  533. X ****
  534. X ****    For PUCC-H
  535. X ****
  536. X ****    $Id: pucc-h.mc,v 1.2 86/04/04 14:18:03 kcs Exp $
  537. X ****
  538. X ***********************************************************
  539. X ***********************************************************/
  540. X
  541. X
  542. X/***********************************************************
  543. X **    local info
  544. X ***********************************************************/
  545. X
  546. Xmacro
  547. X    m_sitename = "h.cc.purdue.edu";        /* internet hostname */
  548. X    berkname   = "h.cc.purdue.edu";        /* berknet hostname  */
  549. X
  550. Xclass
  551. X    m_sitename = { "h.cc.purdue.edu", pucc-h, pucch, h };
  552. X
  553. X
  554. X#include "puccbase.cpp"
  555. X
  556. X
  557. Xoptions
  558. X    /***
  559. X    o_slog = "1";        /* override logging level in base.cpp */
  560. X
  561. X
  562. X#include "zerobase.cpp"
  563. X
  564. X
  565. X/***********************************************
  566. X **  Machine dependent part of ruleset zero   **
  567. X ***********************************************/
  568. X
  569. X    /* resolve berknet names */
  570. X
  571. X    if ( < @berkhost > : path )
  572. X        resolve ( mailer ( berk ),
  573. X              host ( $1 ),
  574. X              user ( $2 ) );        /* @berkhost: ... */
  575. X
  576. X    if ( usr < @berkhost > )
  577. X        resolve ( mailer ( berk ),
  578. X              host ( $2 ),
  579. X              user ( $1 ) );        /* user@berknethost */
  580. X
  581. X    /* we don't do uucp */
  582. X
  583. X    if ( anypath < @anypath ".UUCP" > anypath )
  584. X        resolve ( mailer ( error ),
  585. X              user ( "Non-Local UUCP Mail Unavailable" ) );
  586. X
  587. X    /* resolve campus names (actually, all non-local names) */
  588. X
  589. X    if ( anypath < @anypath hostname > anypath )
  590. X        resolve ( mailer ( pcl ),
  591. X              host ( $3 ),
  592. X              user ( $1<@$2$3>$4 ) );    /* user@campushost */
  593. X
  594. X    if ( path )
  595. X        resolve ( mailer ( local ),
  596. X              user ( $1 ) );        /* everything else */
  597. X
  598. X
  599. X/**************************************
  600. X **  Host dependent address cleanup  **
  601. X **************************************/
  602. X
  603. X
  604. Xruleset HOSTDEP_RW {
  605. X
  606. X    if ( anypath uucphost!usr@path )
  607. X        retry ( $3@$4 );            /* drop uucp forward */
  608. X
  609. X    if ( anypath campushost ".ARPA" anypath )
  610. X        retry ( $1$2$3 );            /* drop ".ARPA" */
  611. X
  612. X}
  613. X
  614. X#include "pclm.cpp"
  615. X#include "berkm.cpp"
  616. END_OF_FILE
  617. if test 2042 -ne `wc -c <'config-files/FINIS/pucc-h.mc'`; then
  618.     echo shar: \"'config-files/FINIS/pucc-h.mc'\" unpacked with wrong size!
  619. fi
  620. # end of 'config-files/FINIS/pucc-h.mc'
  621. fi
  622. if test -f 'config-files/FINIS/pucc-i.mc' -a "${1}" != "-c" ; then 
  623.   echo shar: Will not clobber existing file \"'config-files/FINIS/pucc-i.mc'\"
  624. else
  625. echo shar: Extracting \"'config-files/FINIS/pucc-i.mc'\" \(2059 characters\)
  626. sed "s/^X//" >'config-files/FINIS/pucc-i.mc' <<'END_OF_FILE'
  627. X/***********************************************************
  628. X ***********************************************************
  629. X ****
  630. X ****    SENDMAIL CONFIGURATION FILE
  631. X ****
  632. X ****    For PUCC-I
  633. X ****
  634. X ****    $Id: pucc-i.mc,v 1.2 86/04/04 14:19:21 kcs Exp $
  635. X ****
  636. X ***********************************************************
  637. X ***********************************************************/
  638. X
  639. X
  640. X
  641. X/***********************************************************
  642. X **    local info
  643. X ***********************************************************/
  644. X
  645. Xmacro
  646. X    m_sitename = "i.cc.purdue.edu";     /* internet hostname */
  647. X
  648. Xclass
  649. X    m_sitename = { "i.cc.purdue.edu", pucc-i, pucci, i };
  650. X
  651. X#include "puccbase.cpp"
  652. X
  653. Xoptions
  654. X    /***
  655. X    o_slog = "1";         /* override logging level in base.cpp */
  656. X
  657. X#include "zerobase.cpp"
  658. X
  659. X/**********************************************
  660. X **  Machine dependent part of ruleset zero  **
  661. X **********************************************/
  662. X
  663. X    /* send berknet names through relay */
  664. X
  665. X    if ( < @berkhost > : path )
  666. X        resolve ( mailer ( pcl ),
  667. X                host ( $relay-host ),
  668. X                user ( $2<@$1> ) );        /* @berkhost: ... */
  669. X
  670. X    if ( anypath < @anypath berkhost > anypath )
  671. X        resolve ( mailer ( pcl ),
  672. X              host ( $relay-host ),
  673. X              user ( $1<@$2$3>$4 ) );    /* user@berknethost */
  674. X
  675. X    /* we don't do uucp */
  676. X
  677. X    if ( anypath < @anypath ".UUCP" > anypath )
  678. X        resolve ( mailer ( error ),
  679. X              user ( "Non-Local UUCP Mail Unavailable" ) );
  680. X
  681. X    /* resolve campus names (actually, all non-local names) */
  682. X
  683. X    if ( anypath < @anypath hostname > anypath )
  684. X        resolve ( mailer ( pcl ),
  685. X              host ( $3 ),
  686. X              user ( $1<@$2$3>$4 ) );    /* user@campushost */
  687. X
  688. X    /* remaining names must be local */
  689. X
  690. X    if ( path )
  691. X        resolve ( mailer ( local ),
  692. X              user ( $1 ) );        /* everything else */
  693. X
  694. X
  695. X/**************************************
  696. X **  Host dependent address cleanup  **
  697. X **************************************/
  698. X
  699. Xruleset HOSTDEP_RW {
  700. X
  701. X    if ( anypath uucphost!usr@path )
  702. X        retry ( $3@$4 );            /* drop uucp forward */
  703. X
  704. X    if ( anypath campushost ".ARPA" anypath )
  705. X        retry ( $1$2$3 );            /* drop ".ARPA" */
  706. X
  707. X}
  708. X
  709. X#include "pclm.cpp"
  710. END_OF_FILE
  711. if test 2059 -ne `wc -c <'config-files/FINIS/pucc-i.mc'`; then
  712.     echo shar: \"'config-files/FINIS/pucc-i.mc'\" unpacked with wrong size!
  713. fi
  714. # end of 'config-files/FINIS/pucc-i.mc'
  715. fi
  716. if test -f 'config-files/FINIS/puccbase.cpp' -a "${1}" != "-c" ; then 
  717.   echo shar: Will not clobber existing file \"'config-files/FINIS/puccbase.cpp'\"
  718. else
  719. echo shar: Extracting \"'config-files/FINIS/puccbase.cpp'\" \(1219 characters\)
  720. sed "s/^X//" >'config-files/FINIS/puccbase.cpp' <<'END_OF_FILE'
  721. X
  722. X/************************************************
  723. X ************************************************
  724. X ****
  725. X ****    General configuration information
  726. X ****
  727. X ****    $Id: puccbase.cpp,v 1.4 86/04/04 14:25:46 kcs Exp $
  728. X ****
  729. X ************************************************
  730. X ************************************************/
  731. X
  732. X/********************
  733. X *  General Macros  *
  734. X ********************/
  735. X
  736. Xmacro
  737. X    localname = "PURDUE.EDU";         /* local domain names */
  738. X    relay_host = "pucc-h";            /* berknet relay host */
  739. X    m_oname = "${m_sitename}";        /* my official hostname (sort of */
  740. X
  741. Xclass
  742. X    localname = { "PURDUE.EDU", PURDUE, CC, Purdue-CS, CS, ECN };
  743. X    topdomain = { LOCAL, ARPA, UUCP, BITNET, CSNET };    /* known top-level domains */
  744. X
  745. X#include "localhosts.cpp"
  746. X#include "berkhosts.cpp"
  747. X#include "base.cpp"
  748. X
  749. X/*********************
  750. X *  Rewriting rules  *
  751. X *********************/
  752. X
  753. X/*** special local conversions ***/
  754. XS6
  755. X# R$*<@$*$=D>$*        $1<@$2LOCAL>$4            convert local domain
  756. X# R$*<@$*$=D.ARPA>$*    $1<@$2LOCAL>$4
  757. XR$*<@$+.$=T.$=T>$*    $1<@$2.$3>$5            delete dup top level
  758. XR$*<@$*$=S.UUCP>$*    $1<@$2$3>$4            local UUCP direct
  759. XR$*<@$*$=Z.UUCP>$*    $1<@$2$3>$4            local UUCP direct
  760. XR$*<@$=Y$*>$*        $1<@cs$3>$4            cs-host => cs kludge
  761. X
  762. X
  763. X#include "localm.cpp"
  764. END_OF_FILE
  765. if test 1219 -ne `wc -c <'config-files/FINIS/puccbase.cpp'`; then
  766.     echo shar: \"'config-files/FINIS/puccbase.cpp'\" unpacked with wrong size!
  767. fi
  768. # end of 'config-files/FINIS/puccbase.cpp'
  769. fi
  770. if test -f 'config-files/FINIS/version.cpp' -a "${1}" != "-c" ; then 
  771.   echo shar: Will not clobber existing file \"'config-files/FINIS/version.cpp'\"
  772. else
  773. echo shar: Extracting \"'config-files/FINIS/version.cpp'\" \(98 characters\)
  774. sed "s/^X//" >'config-files/FINIS/version.cpp' <<'END_OF_FILE'
  775. X
  776. X/* $Id: version.cpp,v 1.3 85/05/04 17:01:03 acu Exp Locker: acu $ */
  777. X
  778. Xmacro
  779. X    berkhosts = "4.41";
  780. END_OF_FILE
  781. if test 98 -ne `wc -c <'config-files/FINIS/version.cpp'`; then
  782.     echo shar: \"'config-files/FINIS/version.cpp'\" unpacked with wrong size!
  783. fi
  784. # end of 'config-files/FINIS/version.cpp'
  785. fi
  786. if test -f 'config-files/FINIS/zerobase.cpp' -a "${1}" != "-c" ; then 
  787.   echo shar: Will not clobber existing file \"'config-files/FINIS/zerobase.cpp'\"
  788. else
  789. echo shar: Extracting \"'config-files/FINIS/zerobase.cpp'\" \(2139 characters\)
  790. sed "s/^X//" >'config-files/FINIS/zerobase.cpp' <<'END_OF_FILE'
  791. X
  792. X/***********************************************************
  793. X ***********************************************************
  794. X ****
  795. X ****    RULESET ZERO PREAMBLE
  796. X ****
  797. X ****    The beginning of ruleset zero is constant through all
  798. X ****    configurations.
  799. X ****
  800. X ****    $Id: zerobase.cpp,v 1.4 86/04/04 14:31:36 kcs Exp $
  801. X ****
  802. X ***********************************************************
  803. X ***********************************************************/
  804. X
  805. Xruleset BASE_RW {
  806. X
  807. X    /* first make canonical */
  808. X
  809. X    if ( anypath < anypath > anypath )
  810. X        retry ( $1$2$3);            /* defocus */
  811. X    if ( path )
  812. X        next ( NAME_CANON ( $1 ) );        /* make canonical */
  813. X
  814. X    /* handle special cases..... */
  815. X
  816. X    if ( @ )
  817. X        resolve ( mailer (local),
  818. X              user ("MAILER-DAEMON") );    /* handle <> form */
  819. X    if ( anypath < @[path] > anypath )
  820. X        resolve ( mailer (tcp),
  821. X              host (hostnum ($2)),
  822. X              user ("$1@[$2]$3") );        /* numeric internet spec */
  823. X
  824. X    /* arrange for local names to be fully qualified */
  825. X
  826. X    /***
  827. X    if ( anypath < anypath campushost > anypath )
  828. X        retry ( $1<$2$3".LOCAL">$4 );        /* user@campushost */
  829. X    /***
  830. X    if ( anypath < anypath berkhost > anypath )
  831. X        retry ( $1<$2$3".LOCAL">$4 );        /* user@berkhost */
  832. X    /***
  833. X    if ( anypath < path ".ARPA.LOCAL" > anypath )
  834. X        retry ( $1<$2".ARPA">$3 );        /* because ARPA is a host */
  835. X
  836. X    /* delete local domain info -- this is a (temporary?) kludge */
  837. X
  838. X    if ( anypath < anypath "." $localname > anypath )
  839. X        retry ( $1<$2>$3 );            /* strip local domain */
  840. X    if ( anypath < anypath "." localdomain > anypath )
  841. X        retry ( $1<$2>$4 );            /* strip local subdomains */
  842. X
  843. X    /* now delete (more) local info */
  844. X
  845. X    if ( anypath < anypath this_host "." topdomain_id > anypath )
  846. X        retry ( $1<$2>$5 );            /* this_host.LOCAL */
  847. X    if ( anypath < anypath this_host > anypath )
  848. X        retry ( $1<$2>$4 );            /* this_host */
  849. X    if ( anypath < anypath "." > anypath )
  850. X        retry ( $1<$2>$3 );            /* drop trailing dot */
  851. X    if ( < @ > : anypath )
  852. X        return ( BASE_RW ( $1 ) );        /* retry after route strip */
  853. X    if ( anypath < @ > )
  854. X        return ( BASE_RW ( $1 ) );        /* strip null trash and retry */
  855. X
  856. X
  857. X/********************************
  858. X * End of ruleset zero preamble * 
  859. X ********************************/
  860. END_OF_FILE
  861. if test 2139 -ne `wc -c <'config-files/FINIS/zerobase.cpp'`; then
  862.     echo shar: \"'config-files/FINIS/zerobase.cpp'\" unpacked with wrong size!
  863. fi
  864. # end of 'config-files/FINIS/zerobase.cpp'
  865. fi
  866. if test -f 'config-files/KEY' -a "${1}" != "-c" ; then 
  867.   echo shar: Will not clobber existing file \"'config-files/KEY'\"
  868. else
  869. echo shar: Extracting \"'config-files/KEY'\" \(1377 characters\)
  870. sed "s/^X//" >'config-files/KEY' <<'END_OF_FILE'
  871. X        USES FOR MACROS AND CLASSES
  872. X
  873. X    MACROS                CLASSES
  874. X    ======                =======
  875. X
  876. XA    arpanet name            arpanet names
  877. XB
  878. XC    comp ctr gateway (ucbvax only)    comp ctr hosts (ucbvax & jade only)
  879. X -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
  880. XD    full local domain name        (bottom) local domain names  $locdomain
  881. XE
  882. XF    forwarding host, $R default    hosts that we cannot talk directly to
  883. X -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
  884. XG
  885. XH    internet name            all names this host is known by
  886. XI
  887. X -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
  888. XJ
  889. XK
  890. XL
  891. X -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
  892. XM
  893. XN    ncp gateway            list of ncp-only hosts
  894. XO
  895. X -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
  896. XP
  897. XQ
  898. XR    relay host (e.g., ucbvax)
  899. X -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
  900. XS                    known internet hostnames
  901. XT                    top level domains
  902. XU    uucp name            uucp names
  903. X -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
  904. XV    a machine with local uucp link    uucp sites on $V machine
  905. XW    a machine with local uucp link    uucp sites on $W machine
  906. XX    a machine with local uucp link    uucp sites on $X machine
  907. X -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
  908. XY
  909. XZ    config version code        known berknet hosts    $berkhosts
  910. END_OF_FILE
  911. if test 1377 -ne `wc -c <'config-files/KEY'`; then
  912.     echo shar: \"'config-files/KEY'\" unpacked with wrong size!
  913. fi
  914. # end of 'config-files/KEY'
  915. fi
  916. if test -f 'config-files/README' -a "${1}" != "-c" ; then 
  917.   echo shar: Will not clobber existing file \"'config-files/README'\"
  918. else
  919. echo shar: Extracting \"'config-files/README'\" \(327 characters\)
  920. sed "s/^X//" >'config-files/README' <<'END_OF_FILE'
  921. XIronically enough, PUCC doesn't yet use ease for our configuration
  922. Xfiles.  These are approximations to what will eventually become
  923. Xour configuration files.  They are not entirely finished, but the ones
  924. Xin "FINIS" are pretty much done, according to what Jim Schoner said
  925. Xbefore he left.  Someday I'll finish them...
  926. X
  927. XJeff Smith
  928. END_OF_FILE
  929. if test 327 -ne `wc -c <'config-files/README'`; then
  930.     echo shar: \"'config-files/README'\" unpacked with wrong size!
  931. fi
  932. # end of 'config-files/README'
  933. fi
  934. if test -f 'config-files/pucc-k.mc' -a "${1}" != "-c" ; then 
  935.   echo shar: Will not clobber existing file \"'config-files/pucc-k.mc'\"
  936. else
  937. echo shar: Extracting \"'config-files/pucc-k.mc'\" \(1462 characters\)
  938. sed "s/^X//" >'config-files/pucc-k.mc' <<'END_OF_FILE'
  939. X/***********************************************************
  940. X ***********************************************************
  941. X ****
  942. X ****    SENDMAIL CONFIGURATION FILE
  943. X ****
  944. X ****    For PUCC-K
  945. X ****
  946. X ****    $Id: pucc-k.mc,v 1.2 86/04/04 14:22:32 kcs Exp $
  947. X ****
  948. X ***********************************************************
  949. X ***********************************************************/
  950. X
  951. X
  952. X
  953. X/***********************************************************
  954. X **    local info
  955. X ***********************************************************/
  956. X
  957. X/* internet hostname */
  958. XDwk.cc.purdue.edu
  959. XCwk.cc.purdue.edu pucc-k pucck k
  960. X
  961. X#include "puccbase.cpp"
  962. X
  963. X/* override logging level in base.cpp */
  964. X# OL1
  965. X
  966. X#include "zerobase.cpp"
  967. X
  968. X################################################
  969. X###  Machine dependent part of ruleset zero  ###
  970. X################################################
  971. X
  972. X# send berknet names through relay
  973. XR<@$=Z>:$+        $#pcl$@$R$:$2<@$1>        @berkhost: ...
  974. XR$*<@$*$=Z>$*        $#pcl$@$R$:$1<@$2$3>$4        user@berknethost
  975. X
  976. X# we don't do uucp 
  977. XR$*<@$*.UUCP>$*        $#error$:Non-Local UUCP Mail Unavailable
  978. X
  979. X# resolve campus names (actually, all non-local names)
  980. XR$*<@$*$->$*        $#pcl$@$3$:$1<@$2$3>$4        user@campushost
  981. X
  982. X# remaining names must be local
  983. XR$+            $#local$:$1            everything else
  984. X
  985. X########################################
  986. X###  Host dependent address cleanup  ###
  987. X########################################
  988. X
  989. XS8
  990. XR$*$=U!$+@$+        $3@$4                drop uucp forward
  991. XR$*$=S.ARPA$*        $1$2$3                drop ".ARPA"
  992. X
  993. X
  994. Xinclude(pclm.cpp)
  995. END_OF_FILE
  996. if test 1462 -ne `wc -c <'config-files/pucc-k.mc'`; then
  997.     echo shar: \"'config-files/pucc-k.mc'\" unpacked with wrong size!
  998. fi
  999. # end of 'config-files/pucc-k.mc'
  1000. fi
  1001. if test -f 'config-files/pucc-n.mc' -a "${1}" != "-c" ; then 
  1002.   echo shar: Will not clobber existing file \"'config-files/pucc-n.mc'\"
  1003. else
  1004. echo shar: Extracting \"'config-files/pucc-n.mc'\" \(1456 characters\)
  1005. sed "s/^X//" >'config-files/pucc-n.mc' <<'END_OF_FILE'
  1006. X/***********************************************************
  1007. X ***********************************************************
  1008. X ****
  1009. X ****    SENDMAIL CONFIGURATION FILE
  1010. X ****
  1011. X ****    For PUCC-N
  1012. X ****
  1013. X ****    $Id: pucc-n.mc,v 1.2 86/04/04 14:23:57 kcs Exp $
  1014. X ****
  1015. X ***********************************************************
  1016. X ***********************************************************/
  1017. X
  1018. X
  1019. X
  1020. X/***********************************************************
  1021. X **    local info
  1022. X ***********************************************************/
  1023. X
  1024. X/* internet hostname */
  1025. XDwn.cc.purdue.edu
  1026. XCwn.cc.purdue.edu pucc-n puccn n
  1027. X
  1028. X#include "puccbase.cpp"
  1029. X
  1030. X# override logging level in base.cpp
  1031. X# OL1
  1032. X
  1033. Xinclude(zerobase.cpp)
  1034. X
  1035. X################################################
  1036. X###  Machine dependent part of ruleset zero  ###
  1037. X################################################
  1038. X
  1039. X# send berknet names through relay
  1040. XR<@$=Z>:$+        $#pcl$@$R$:$2<@$1>        @berkhost: ...
  1041. XR$*<@$*$=Z>$*        $#pcl$@$R$:$1<@$2$3>$4        user@berknethost
  1042. X
  1043. X# we don't do uucp 
  1044. XR$*<@$*.UUCP>$*        $#error$:Non-Local UUCP Mail Unavailable
  1045. X
  1046. X# resolve campus names (actually, all non-local names)
  1047. XR$*<@$*$->$*        $#pcl$@$3$:$1<@$2$3>$4        user@campushost
  1048. X
  1049. X# remaining names must be local
  1050. XR$+            $#local$:$1            everything else
  1051. X
  1052. X########################################
  1053. X###  Host dependent address cleanup  ###
  1054. X########################################
  1055. X
  1056. XS8
  1057. XR$*$=U!$+@$+        $3@$4                drop uucp forward
  1058. XR$*$=S.ARPA$*        $1$2$3                drop ".ARPA"
  1059. X
  1060. X
  1061. Xinclude(pclm.cpp)
  1062. END_OF_FILE
  1063. if test 1456 -ne `wc -c <'config-files/pucc-n.mc'`; then
  1064.     echo shar: \"'config-files/pucc-n.mc'\" unpacked with wrong size!
  1065. fi
  1066. # end of 'config-files/pucc-n.mc'
  1067. fi
  1068. if test -f 'config-files/pucc-s.mc' -a "${1}" != "-c" ; then 
  1069.   echo shar: Will not clobber existing file \"'config-files/pucc-s.mc'\"
  1070. else
  1071. echo shar: Extracting \"'config-files/pucc-s.mc'\" \(1472 characters\)
  1072. sed "s/^X//" >'config-files/pucc-s.mc' <<'END_OF_FILE'
  1073. X/***********************************************************
  1074. X ***********************************************************
  1075. X ****
  1076. X ****    SENDMAIL CONFIGURATION FILE
  1077. X ****
  1078. X ****    For PUCC-S
  1079. X ****
  1080. X ****    $Id: pucc-s.mc,v 1.1 86/03/31 11:16:37 kcs Exp Locker: kcs $
  1081. X ****
  1082. X ***********************************************************
  1083. X ***********************************************************/
  1084. X
  1085. X
  1086. X
  1087. X/***********************************************************
  1088. X **    local info
  1089. X ***********************************************************/
  1090. X
  1091. X/* internet hostname */
  1092. XDws.cc.purdue.edu
  1093. XCws.cc.purdue.edu pucc-s puccs s
  1094. X
  1095. X#include "puccbase.cpp"
  1096. X
  1097. X/* override logging level in base.cpp */
  1098. X# OL1
  1099. X
  1100. Xinclude(zerobase.cpp)
  1101. X
  1102. X################################################
  1103. X###  Machine dependent part of ruleset zero  ###
  1104. X################################################
  1105. X
  1106. X# send berknet names through relay
  1107. XR<@$=Z>:$+        $#pcl$@$R$:$2<@$1>        @berkhost: ...
  1108. XR$*<@$*$=Z>$*        $#pcl$@$R$:$1<@$2$3>$4        user@berknethost
  1109. X
  1110. X# we don't do uucp 
  1111. XR$*<@$*.UUCP>$*        $#error$:Non-Local UUCP Mail Unavailable
  1112. X
  1113. X# resolve campus names (actually, all non-local names)
  1114. XR$*<@$*$->$*        $#pcl$@$3$:$1<@$2$3>$4        user@campushost
  1115. X
  1116. X# remaining names must be local
  1117. XR$+            $#local$:$1            everything else
  1118. X
  1119. X########################################
  1120. X###  Host dependent address cleanup  ###
  1121. X########################################
  1122. X
  1123. XS8
  1124. XR$*$=U!$+@$+        $3@$4                drop uucp forward
  1125. XR$*$=S.ARPA$*        $1$2$3                drop ".ARPA"
  1126. X
  1127. X
  1128. Xinclude(pclm.cpp)
  1129. END_OF_FILE
  1130. if test 1472 -ne `wc -c <'config-files/pucc-s.mc'`; then
  1131.     echo shar: \"'config-files/pucc-s.mc'\" unpacked with wrong size!
  1132. fi
  1133. # end of 'config-files/pucc-s.mc'
  1134. fi
  1135. if test -f 'config-files/puccbase.cpp' -a "${1}" != "-c" ; then 
  1136.   echo shar: Will not clobber existing file \"'config-files/puccbase.cpp'\"
  1137. else
  1138. echo shar: Extracting \"'config-files/puccbase.cpp'\" \(1219 characters\)
  1139. sed "s/^X//" >'config-files/puccbase.cpp' <<'END_OF_FILE'
  1140. X
  1141. X/************************************************
  1142. X ************************************************
  1143. X ****
  1144. X ****    General configuration information
  1145. X ****
  1146. X ****    $Id: puccbase.cpp,v 1.4 86/04/04 14:25:46 kcs Exp $
  1147. X ****
  1148. X ************************************************
  1149. X ************************************************/
  1150. X
  1151. X/********************
  1152. X *  General Macros  *
  1153. X ********************/
  1154. X
  1155. Xmacro
  1156. X    localname = "PURDUE.EDU";         /* local domain names */
  1157. X    relay_host = "pucc-h";            /* berknet relay host */
  1158. X    m_oname = "${m_sitename}";        /* my official hostname (sort of */
  1159. X
  1160. Xclass
  1161. X    localname = { "PURDUE.EDU", PURDUE, CC, Purdue-CS, CS, ECN };
  1162. X    topdomain = { LOCAL, ARPA, UUCP, BITNET, CSNET };    /* known top-level domains */
  1163. X
  1164. X#include "localhosts.cpp"
  1165. X#include "berkhosts.cpp"
  1166. X#include "base.cpp"
  1167. X
  1168. X/*********************
  1169. X *  Rewriting rules  *
  1170. X *********************/
  1171. X
  1172. X/*** special local conversions ***/
  1173. XS6
  1174. X# R$*<@$*$=D>$*        $1<@$2LOCAL>$4            convert local domain
  1175. X# R$*<@$*$=D.ARPA>$*    $1<@$2LOCAL>$4
  1176. XR$*<@$+.$=T.$=T>$*    $1<@$2.$3>$5            delete dup top level
  1177. XR$*<@$*$=S.UUCP>$*    $1<@$2$3>$4            local UUCP direct
  1178. XR$*<@$*$=Z.UUCP>$*    $1<@$2$3>$4            local UUCP direct
  1179. XR$*<@$=Y$*>$*        $1<@cs$3>$4            cs-host => cs kludge
  1180. X
  1181. X
  1182. X#include "localm.cpp"
  1183. END_OF_FILE
  1184. if test 1219 -ne `wc -c <'config-files/puccbase.cpp'`; then
  1185.     echo shar: \"'config-files/puccbase.cpp'\" unpacked with wrong size!
  1186. fi
  1187. # end of 'config-files/puccbase.cpp'
  1188. fi
  1189. if test -f 'config-files/stat-l.mc' -a "${1}" != "-c" ; then 
  1190.   echo shar: Will not clobber existing file \"'config-files/stat-l.mc'\"
  1191. else
  1192. echo shar: Extracting \"'config-files/stat-l.mc'\" \(1384 characters\)
  1193. sed "s/^X//" >'config-files/stat-l.mc' <<'END_OF_FILE'
  1194. X############################################################
  1195. X############################################################
  1196. X#####
  1197. X#####    SENDMAIL CONFIGURATION FILE
  1198. X#####
  1199. X#####    For STAT-L
  1200. X#####
  1201. X#####    $Id: stat-l.mc,v 1.2 86/04/04 14:27:47 kcs Exp $
  1202. X#####
  1203. X############################################################
  1204. X############################################################
  1205. X
  1206. X
  1207. X
  1208. X############################################################
  1209. X###    local info
  1210. X############################################################
  1211. X
  1212. X# internet hostname
  1213. XDwstat-l
  1214. XCwstat-l statl l stat
  1215. X
  1216. Xinclude(puccbase.cpp)
  1217. X
  1218. Xinclude(zerobase.cpp)
  1219. X
  1220. X################################################
  1221. X###  Machine dependent part of ruleset zero  ###
  1222. X################################################
  1223. X
  1224. X# send berknet names through relay
  1225. XR<@$=Z>:$+        $#pcl$@$R$:$2<@$1>        @berkhost: ...
  1226. XR$*<@$*$=Z>$*        $#pcl$@$R$:$1<@$2$3>$4        user@berknethost
  1227. X
  1228. X# we don't do uucp 
  1229. XR$*<@$*.UUCP>$*        $#error$:Non-Local UUCP Mail Unavailable
  1230. X
  1231. X# resolve campus names (actually, all non-local names)
  1232. XR$*<@$*$->$*        $#pcl$@$3$:$1<@$2$3>$4        user@campushost
  1233. X
  1234. X# remaining names must be local
  1235. XR$+            $#local$:$1            everything else
  1236. X
  1237. X########################################
  1238. X###  Host dependent address cleanup  ###
  1239. X########################################
  1240. X
  1241. XS8
  1242. XR$*$=U!$+@$+        $3@$4                drop uucp forward
  1243. XR$*$=S.ARPA$*        $1$2$3                drop ".ARPA"
  1244. X
  1245. X
  1246. Xinclude(pclm.cpp)
  1247. END_OF_FILE
  1248. if test 1384 -ne `wc -c <'config-files/stat-l.mc'`; then
  1249.     echo shar: \"'config-files/stat-l.mc'\" unpacked with wrong size!
  1250. fi
  1251. # end of 'config-files/stat-l.mc'
  1252. fi
  1253. if test -f 'config-files/tcpm.cpp' -a "${1}" != "-c" ; then 
  1254.   echo shar: Will not clobber existing file \"'config-files/tcpm.cpp'\"
  1255. else
  1256. echo shar: Extracting \"'config-files/tcpm.cpp'\" \(2055 characters\)
  1257. sed "s/^X//" >'config-files/tcpm.cpp' <<'END_OF_FILE'
  1258. X
  1259. X/***********************************************************
  1260. X ***********************************************************
  1261. X ****
  1262. X ****    Arpanet TCP Mailer specification
  1263. X ****
  1264. X ****    Messages processed by this specification are assumed to leave
  1265. X ****    the local domain -- hence, they must be canonical according to
  1266. X ****    RFC822 etc.
  1267. X ****
  1268. X ****    $Id: tcpm.cpp,v 1.5 86/04/04 14:29:16 kcs Exp $
  1269. X ****
  1270. X ***********************************************************
  1271. X ***********************************************************/
  1272. X
  1273. X#ifndef cppCOMPAT
  1274. X#include "compat.cpp"
  1275. X#endif
  1276. X
  1277. Xmailer
  1278. X    tcp { Path    = "[IPC]",
  1279. X          Flags    = { f_mult, f_date, f_from, f_mesg, f_upperu,
  1280. X                f_dot, f_llimit },
  1281. X          Sender    = MAP_RW,
  1282. X          Recipient = MAP_RW,
  1283. X          Argv    = "IPC ${m_rhost}",
  1284. X          Eol    = "\r\n",
  1285. X          Maxsize    = "100000"
  1286. X    };
  1287. X
  1288. X
  1289. Xruleset MAP_RW {
  1290. X
  1291. X    /* pass <route-addr>'s through */
  1292. X
  1293. X    /***
  1294. X    if ( < @path > anypath )
  1295. X        return ( <@canon($1)>$2 );        /* resolve <route-addr> */
  1296. X
  1297. X    if ( < @path > anypath )
  1298. X        return ( <@$1>$2 );            /* resolve <route-addr> */
  1299. X
  1300. X    /* map colons to dots everywhere..... */
  1301. X
  1302. X    if ( anypath : anypath )
  1303. X        retry ( $1.$2 );            /* map colons to dots */
  1304. X
  1305. X    /* handle the simple case.... */
  1306. X
  1307. X    /***
  1308. X    if ( path < @hostname ".ARPA" > )
  1309. X        return ( $1<@canon($2".ARPA")> );    /* user@host.ARPA */
  1310. X
  1311. X    if ( path < @hostname ".ARPA" > )
  1312. X        return ( $1<@$2".ARPA"> );        /* user@host.ARPA */
  1313. X
  1314. X    /***
  1315. X    if ( path < @hostpath ".LOCAL" > )
  1316. X# R$+<@$+.LOCAL>    $@$1%$2<@$A>            local hosts
  1317. X# R$+<@$+.BITNET>    $@$1%$2.BITNET<@$A>        user@host.BITNET
  1318. X# R$+<@$+.CSNET>    $@$1.$2<@CSNET-RELAY.ARPA>    user@host.CSNET
  1319. X
  1320. X# handle other external cases
  1321. X# R$+<@$->        $@$1<@$[$2$]>            no .ARPA on simple names
  1322. XR$+<@$->        $@$1<@$2>            no .ARPA on simple names
  1323. XR$+<@$+.$->        $@$1<@$2$3>            already ok (we think)
  1324. X# R$+<@$+.$-.ARPA>    $@$1%$2<@$[$3.ARPA$]>        approximate something
  1325. XR$+<@[$+]>        $@$1<@[$2]>            already ok
  1326. X
  1327. X# convert remaining addresses to old format and externalize appropriately
  1328. XR$+            $:$>5$1                => old format
  1329. XR$-:$+            $@$1.$2<@$A.$D>            convert berk hosts
  1330. XR$*            $@$1<@$A.$D>            tack on our host name
  1331. END_OF_FILE
  1332. if test 2055 -ne `wc -c <'config-files/tcpm.cpp'`; then
  1333.     echo shar: \"'config-files/tcpm.cpp'\" unpacked with wrong size!
  1334. fi
  1335. # end of 'config-files/tcpm.cpp'
  1336. fi
  1337. if test ! -d 'doc' ; then
  1338.     echo shar: Creating directory \"'doc'\"
  1339.     mkdir 'doc'
  1340. fi
  1341. if test ! -d 'config-files' ; then
  1342.     echo shar: Creating directory \"'config-files'\"
  1343.     mkdir 'config-files'
  1344. fi
  1345. if test ! -d 'config-files/FINIS' ; then
  1346.     echo shar: Creating directory \"'config-files/FINIS'\"
  1347.     mkdir 'config-files/FINIS'
  1348. fi
  1349. if test ! -d 'maketd' ; then
  1350.     echo shar: Creating directory \"'maketd'\"
  1351.     mkdir 'maketd'
  1352. fi
  1353. if test ! -d 'maketd/Manual' ; then
  1354.     echo shar: Creating directory \"'maketd/Manual'\"
  1355.     mkdir 'maketd/Manual'
  1356. fi
  1357. if test -f 'doc/Makefile' -a "${1}" != "-c" ; then 
  1358.   echo shar: Will not clobber existing file \"'doc/Makefile'\"
  1359. else
  1360. echo shar: Extracting \"'doc/Makefile'\" \(293 characters\)
  1361. sed "s/^X//" >'doc/Makefile' <<'END_OF_FILE'
  1362. X#
  1363. X#    Makefile for Ease document.
  1364. X#
  1365. X#    James S. Schoner
  1366. X#    Purdue University Computing Center
  1367. X#
  1368. Xall:    cover mainbody apen1 apen2 apen3
  1369. X    
  1370. Xcover: FRC
  1371. X    troff -ms cover
  1372. X
  1373. Xmainbody:
  1374. X    tbl ease.paper | troff -ms
  1375. X
  1376. Xapen1:
  1377. X    tbl ap1 | troff -ms
  1378. X
  1379. Xapen2:
  1380. X    tbl ap2 | troff -ms
  1381. X
  1382. Xapen3:
  1383. X    tbl ap3 | troff -ms
  1384. X
  1385. XFRC:
  1386. X
  1387. END_OF_FILE
  1388. if test 293 -ne `wc -c <'doc/Makefile'`; then
  1389.     echo shar: \"'doc/Makefile'\" unpacked with wrong size!
  1390. fi
  1391. # end of 'doc/Makefile'
  1392. fi
  1393. if test -f 'doc/ap1' -a "${1}" != "-c" ; then 
  1394.   echo shar: Will not clobber existing file \"'doc/ap1'\"
  1395. else
  1396. echo shar: Extracting \"'doc/ap1'\" \(1384 characters\)
  1397. sed "s/^X//" >'doc/ap1' <<'END_OF_FILE'
  1398. X.DS C
  1399. X\s+5\fBAppendix A\fR
  1400. X
  1401. X
  1402. X\fBPre-Declared Macros\fR\s-5
  1403. X.DE
  1404. X.sp 5
  1405. X.TS 
  1406. Xcenter box;
  1407. Xc|c|c
  1408. Xl|l|l.
  1409. X\fBEase\fR Macro    Raw Equivalent    Meaning*
  1410. X=
  1411. X\fIm_odate\fR    a    The origination date in Arpanet format
  1412. X\fIm_adate\fR    b    The current date in Arpanet format
  1413. X\fIm_hops\fR    c    The hop count
  1414. X\fIm_udate\fR    d    The date in UNIX (ctime) format
  1415. X\fIm_smtp\fR    e    The SMTP entry message
  1416. X\fIm_saddr\fR    f    The sender (from) address
  1417. X\fIm_sreladdr\fR    g    The sender address relative to the recipient
  1418. X\fIm_rhost\fR    h    The recipient host
  1419. X\fIm_qid\fR    i    The queue id
  1420. X\fIm_oname\fR    j    The official domain name for this site
  1421. X\fIm_ufrom\fR    l    The format of the UNIX from line
  1422. X\fIm_daemon\fR    n    The name of the daemon (for error messages)
  1423. X\fIm_addrops\fR    o    The set of "operators" in addresses
  1424. X\fIm_pid\fR    p    Sendmail's pid
  1425. X\fIm_defaddr\fR    q    The default format of sender address
  1426. X\fIm_protocol\fR    r    Protocol used
  1427. X\fIm_shostname\fR    s    Sender's host name
  1428. X\fIm_ctime\fR    t    A numeric representation of the current time
  1429. X\fIm_ruser\fR    u    The recipient user
  1430. X\fIm_version\fR    v    The version number of sendmail
  1431. X\fIm_sitename\fR    w    The hostname of this site
  1432. X\fIm_sname\fR    x    The full name of the sender
  1433. X\fIm_stty\fR    y    The id of the sender's tty
  1434. X\fIm_rhdir\fR    z    The home directory of the recipient
  1435. X.TE
  1436. X.FS
  1437. X*  Taken from pages 15 and 16 of the Installation and Operation Guide
  1438. Xfor Sendmail (UNIX Programmer's Manual, Volume 2c), by Eric Allman.
  1439. X.FE
  1440. END_OF_FILE
  1441. if test 1384 -ne `wc -c <'doc/ap1'`; then
  1442.     echo shar: \"'doc/ap1'\" unpacked with wrong size!
  1443. fi
  1444. # end of 'doc/ap1'
  1445. fi
  1446. if test -f 'doc/ap2' -a "${1}" != "-c" ; then 
  1447.   echo shar: Will not clobber existing file \"'doc/ap2'\"
  1448. else
  1449. echo shar: Extracting \"'doc/ap2'\" \(1153 characters\)
  1450. sed "s/^X//" >'doc/ap2' <<'END_OF_FILE'
  1451. X.DS C
  1452. X\s+5\fBAppendix B\fR
  1453. X
  1454. X
  1455. X\fBSendmail Options\fR\s-5
  1456. X.DE
  1457. X.sp 2
  1458. X.PP
  1459. XFor a complete description of Sendmail's options and their values, refer to 
  1460. XAppendix B of the Installation and Operation Guide for Sendmail (UNIX
  1461. XProgrammer's Manual, Volume 2c), by Eric Allman.
  1462. X.sp 2
  1463. X.TS 
  1464. Xcenter box;
  1465. Xc|c
  1466. Xl|l.
  1467. XSendmail Option (\fBEase\fR)    Sendmail Option (Raw)    Special Values
  1468. X=
  1469. X\fIo_alias\fR    A    
  1470. X\fIo_ewait\fR    a    
  1471. X\fIo_bsub\fR    B    
  1472. X\fIo_qwait\fR    c    
  1473. X\fIo_delivery\fR  (special values below)    d  (special values below)
  1474. X     \fId_interactive\fR         i 
  1475. X     \fId_background\fR        b 
  1476. X     \fId_queue\fR        q
  1477. X\fIo_rebuild\fR    D
  1478. X\fIo_handling\fR  (special values below)    e  (special values below)
  1479. X     \fIh_print\fR         p 
  1480. X     \fIh_exit\fR         q
  1481. X     \fIh_mail\fR         m
  1482. X     \fIh_write\fR         w
  1483. X     \fIh_mailz\fR         e
  1484. X\fIo_tmode\fR    F    
  1485. X\fIo_usave\fR    f    
  1486. X\fIo_gid\fR    g    
  1487. X\fIo_fsmtp\fR    H    
  1488. X\fIo_skipd\fR    i    
  1489. X\fIo_slog\fR    L    
  1490. X\fIo_rsend\fR    m    
  1491. X\fIo_dnet\fR    N    
  1492. X\fIo_hformat\fR    o    
  1493. X\fIo_qdir\fR    Q    
  1494. X\fIo_tread\fR    r    
  1495. X\fIo_flog\fR    S    
  1496. X\fIo_safe\fR    s    
  1497. X\fIo_qtimeout\fR    T    
  1498. X\fIo_timezone\fR    t    
  1499. X\fIo_dmuid\fR    u    
  1500. X\fIo_verbose\fR    v    
  1501. X\fIo_wizpass\fR    W    
  1502. X\fIo_loadq\fR    x    
  1503. X\fIo_loadnc\fR    X    
  1504. X.TE
  1505. END_OF_FILE
  1506. if test 1153 -ne `wc -c <'doc/ap2'`; then
  1507.     echo shar: \"'doc/ap2'\" unpacked with wrong size!
  1508. fi
  1509. # end of 'doc/ap2'
  1510. fi
  1511. if test -f 'doc/ap3' -a "${1}" != "-c" ; then 
  1512.   echo shar: Will not clobber existing file \"'doc/ap3'\"
  1513. else
  1514. echo shar: Extracting \"'doc/ap3'\" \(689 characters\)
  1515. sed "s/^X//" >'doc/ap3' <<'END_OF_FILE'
  1516. X.DS C
  1517. X\s+5\fBAppendix C\fR
  1518. X
  1519. X
  1520. X\fBMailer Flags\fR\s-5
  1521. X.DE
  1522. X.sp 5
  1523. X.PP
  1524. XFor a complete description of mailer flags, refer to 
  1525. XAppendix C of the Installation and Operation Guide for Sendmail (UNIX
  1526. XProgrammer's Manual, Volume 2c), by Eric Allman.
  1527. X.sp 5
  1528. X.TS 
  1529. Xcenter box;
  1530. Xc|c
  1531. Xl|l.
  1532. XMailer Flag (\fBEase\fR)    Mailer Flag (Raw)
  1533. X=
  1534. X\fIf_ffrom\fR    f
  1535. X\fIf_rfrom\fR    r
  1536. X\fIf_noreset\fR    S
  1537. X\fIf_noufrom\fR    n
  1538. X\fIf_locm\fR    l
  1539. X\fIf_strip\fR    s 
  1540. X\fIf_mult\fR    m
  1541. X\fIf_from\fR    F
  1542. X\fIf_date\fR    D
  1543. X\fIf_mesg\fR    M
  1544. X\fIf_full\fR    x    
  1545. X\fIf_return\fR    P    
  1546. X\fIf_upperu\fR    u    
  1547. X\fIf_upperh\fR    h    
  1548. X\fIf_arpa\fR    A    
  1549. X\fIf_ufrom\fR    U    
  1550. X\fIf_expensive\fR    e    
  1551. X\fIf_dot\fR    X    
  1552. X\fIf_llimit\fR    L    
  1553. X\fIf_retsmtp\fR    p    
  1554. X\fIf_smtp\fR    I    
  1555. X\fIf_addrw\fR    C    
  1556. X.TE
  1557. END_OF_FILE
  1558. if test 689 -ne `wc -c <'doc/ap3'`; then
  1559.     echo shar: \"'doc/ap3'\" unpacked with wrong size!
  1560. fi
  1561. # end of 'doc/ap3'
  1562. fi
  1563. if test -f 'doc/cover' -a "${1}" != "-c" ; then 
  1564.   echo shar: Will not clobber existing file \"'doc/cover'\"
  1565. else
  1566. echo shar: Extracting \"'doc/cover'\" \(262 characters\)
  1567. sed "s/^X//" >'doc/cover' <<'END_OF_FILE'
  1568. X.DA
  1569. X.sp 15
  1570. X.nr PS 14
  1571. X.ps 14
  1572. X.DS C
  1573. X.DE
  1574. X.sp 10
  1575. X.nr PS 36
  1576. X.ps 36
  1577. X.DS C
  1578. X\fBEase:\fR
  1579. X.DE
  1580. X.sp 5
  1581. X.nr PS 22
  1582. X.ps 22
  1583. X.DS C
  1584. XA Configuration Language
  1585. X  
  1586. Xfor Sendmail
  1587. X.DE
  1588. X.sp 13
  1589. X.nr PS 14
  1590. X.ps 14
  1591. X.DS C
  1592. Xby
  1593. X
  1594. X\fIJames S. Schoner\fR
  1595. X\fIPurdue University Computing Center\fR
  1596. X.DE
  1597. END_OF_FILE
  1598. if test 262 -ne `wc -c <'doc/cover'`; then
  1599.     echo shar: \"'doc/cover'\" unpacked with wrong size!
  1600. fi
  1601. # end of 'doc/cover'
  1602. fi
  1603. if test -f 'maketd/Makefile' -a "${1}" != "-c" ; then 
  1604.   echo shar: Will not clobber existing file \"'maketd/Makefile'\"
  1605. else
  1606. echo shar: Extracting \"'maketd/Makefile'\" \(1371 characters\)
  1607. sed "s/^X//" >'maketd/Makefile' <<'END_OF_FILE'
  1608. X# For a VAX
  1609. XDEFS=    -DBSD4_2
  1610. XLDFLAGS=
  1611. X
  1612. X# For a PDP 11/70
  1613. X# DEFS= -DBSD2_9
  1614. X# LDFLAGS= -i
  1615. X
  1616. XINCLUDE=    
  1617. XCFLAGS=    -O ${DEFS} ${INCLUDE}
  1618. XDEST=    /usr/new/bin
  1619. X
  1620. XSRC=    abrv.c maketd.c misc.c nshpopen.c breakargs.c srtunq.c
  1621. XHDR=    maketd.h abrv.h nshpopen.h srtunq.h
  1622. XOBJ=    maketd.o abrv.o misc.o nshpopen.o breakargs.o srtunq.o
  1623. X
  1624. Xall: maketd
  1625. X
  1626. Xmaketd:    ${OBJ}
  1627. X    ${CC} ${LDFLAGS} ${OBJ} -o maketd
  1628. X
  1629. Xclean: FRC
  1630. X    rm -f ${OBJ} maketd \#* *.bak core a.out
  1631. X
  1632. Xdepend:    source
  1633. X    maketd -a ${DEFS} ${INCLUDE} ${SRC}
  1634. X
  1635. Xinstall: maketd
  1636. X    install -s -m 0751 -o binary -g system maketd ${DEST}
  1637. X
  1638. Xlint: source
  1639. X    lint -hpx ${SRC}
  1640. X
  1641. Xprint: source
  1642. X    lpr -p Makefile ${HDR} ${SRC}
  1643. X
  1644. Xshar: source
  1645. X    shar Makefile ${SRC} ${HDR} Manual
  1646. X
  1647. Xsource: Makefile ${SRC} ${HDR}
  1648. X
  1649. Xspotless: clean
  1650. X    rcsclean ${SRC} ${HDR} Makefile
  1651. X
  1652. X${SRC} ${HDR}:
  1653. X    co $@
  1654. X
  1655. XFRC:
  1656. X
  1657. X# a clever way to save a few more characters
  1658. XI=/usr/include/
  1659. XS=/usr/include/sys/
  1660. X
  1661. X# DO NOT DELETE THIS LINE - make depend DEPENDS ON IT
  1662. X
  1663. Xabrv.o: $Ictype.h $Istdio.h abrv.c abrv.h maketd.h srtunq.h
  1664. X
  1665. Xmaketd.o: $Ictype.h $Imachine/machparam.h $Isignal.h $Istdio.h $Sdir.h \
  1666. X    $Sfile.h $Sparam.h $Stypes.h abrv.h maketd.c maketd.h nshpopen.h \
  1667. X    srtunq.h
  1668. X
  1669. Xmisc.o: $Istdio.h $Ssignal.h maketd.h misc.c
  1670. X
  1671. Xnshpopen.o: $Isignal.h $Istdio.h nshpopen.c
  1672. X
  1673. Xbreakargs.o: $Istdio.h breakargs.c
  1674. X
  1675. Xsrtunq.o: $Istdio.h $Stypes.h srtunq.c srtunq.h
  1676. X
  1677. X# *** Do not add anything here - It will go away. ***
  1678. END_OF_FILE
  1679. if test 1371 -ne `wc -c <'maketd/Makefile'`; then
  1680.     echo shar: \"'maketd/Makefile'\" unpacked with wrong size!
  1681. fi
  1682. # end of 'maketd/Makefile'
  1683. fi
  1684. if test -f 'maketd/README' -a "${1}" != "-c" ; then 
  1685.   echo shar: Will not clobber existing file \"'maketd/README'\"
  1686. else
  1687. echo shar: Extracting \"'maketd/README'\" \(456 characters\)
  1688. sed "s/^X//" >'maketd/README' <<'END_OF_FILE'
  1689. XMaketd is a local program a Purdue University Computing Center that
  1690. Xupdates make(1) specification files.  There are two versions of maketd
  1691. Xin this directory.  One is a slow shell version that should work almost
  1692. Xanywhere, the other is a faster C version with more featurtes that may
  1693. Xtake some time to bring up.
  1694. X
  1695. XChoose either to update the makefiles in the ease source, or do it by hand.
  1696. X
  1697. XKevin Braunsdorf, ksb@j.cc.purdue.edu        Mon Nov  3 12:02:18 EST 1986
  1698. END_OF_FILE
  1699. if test 456 -ne `wc -c <'maketd/README'`; then
  1700.     echo shar: \"'maketd/README'\" unpacked with wrong size!
  1701. fi
  1702. # end of 'maketd/README'
  1703. fi
  1704. if test -f 'maketd/abrv.h' -a "${1}" != "-c" ; then 
  1705.   echo shar: Will not clobber existing file \"'maketd/abrv.h'\"
  1706. else
  1707. echo shar: Extracting \"'maketd/abrv.h'\" \(544 characters\)
  1708. sed "s/^X//" >'maketd/abrv.h' <<'END_OF_FILE'
  1709. X/* include srtunq.h first */
  1710. X
  1711. X#define MXABR 26            /* upper case chars used */
  1712. Xextern char    *abrvtbl[];        /* translation table strings */
  1713. Xextern int    abrvlen[];        /* string lengths (for speed) */
  1714. Xextern SRTUNQ    abrv;            /* include file abrevs */
  1715. X
  1716. X/* abbreviation fucntions */
  1717. Xextern int    lngsrt();        /* compare function for abrevs */
  1718. Xextern char    *hincl();        /* optimizer for include paths */
  1719. Xextern void    srchincl();        /* find [A-Z] makefile defines */
  1720. Xextern void    abrvsetup();        /* create abrvs, write them */
  1721. Xextern int    findabr();        /* find longest abrv */
  1722. END_OF_FILE
  1723. if test 544 -ne `wc -c <'maketd/abrv.h'`; then
  1724.     echo shar: \"'maketd/abrv.h'\" unpacked with wrong size!
  1725. fi
  1726. # end of 'maketd/abrv.h'
  1727. fi
  1728. if test -f 'maketd/maketd.h' -a "${1}" != "-c" ; then 
  1729.   echo shar: Will not clobber existing file \"'maketd/maketd.h'\"
  1730. else
  1731. echo shar: Extracting \"'maketd/maketd.h'\" \(809 characters\)
  1732. sed "s/^X//" >'maketd/maketd.h' <<'END_OF_FILE'
  1733. X#define TRUE    1
  1734. X#define FALSE    0
  1735. X#define SPC    '\040'
  1736. X
  1737. X/* globals */
  1738. Xextern char    *prgnm;            /* the progs called name */
  1739. Xextern int    alldep;            /* -a all - /usr/include too */
  1740. Xextern int    usestdout;        /* -d use stdout for makefile */
  1741. Xextern FILE    *makefd;        /* file desc. for output file */
  1742. Xextern char    *makename;        /* -m default file for edit */
  1743. Xextern int    backedup;        /* for interupt recovery */
  1744. Xextern char    backupfn[];        /* backup file name */
  1745. Xextern int    replace;        /* -r replace depends in Makefile */
  1746. Xextern int    shortincl;        /* -x do abreviations */
  1747. Xextern int    verbose;        /* -v verbage for the debugger */
  1748. Xextern char    usage[];        /* for error output */
  1749. X
  1750. Xextern void    err();            /* error msg, exit cleanly */
  1751. Xextern void    errrec();        /* exit cleanly - also signal trap */
  1752. Xextern char    lastlnch();        /* last char in line (not \n) */
  1753. END_OF_FILE
  1754. if test 809 -ne `wc -c <'maketd/maketd.h'`; then
  1755.     echo shar: \"'maketd/maketd.h'\" unpacked with wrong size!
  1756. fi
  1757. # end of 'maketd/maketd.h'
  1758. fi
  1759. if test -f 'maketd/nshpopen.c' -a "${1}" != "-c" ; then 
  1760.   echo shar: Will not clobber existing file \"'maketd/nshpopen.c'\"
  1761. else
  1762. echo shar: Extracting \"'maketd/nshpopen.c'\" \(2253 characters\)
  1763. sed "s/^X//" >'maketd/nshpopen.c' <<'END_OF_FILE'
  1764. X/* @(#)popen.c    4.5 (Berkeley) 7/6/84
  1765. X * Modified from 4.2, 2.9 BSD popen by Stephen Uitti, PUCC, Nov '85
  1766. X * Doesn't invoke shell, saving time, becoming more secure.
  1767. X * Calls breakargs to break line into command line arguments,
  1768. X * delimited by white space, but ignores globing and quoting
  1769. X * characters.  For use where you don't need shell meta character
  1770. X * expansion or filename globbing.
  1771. X */
  1772. X#ifdef BSD2_9
  1773. X#include <sys/types.h>
  1774. X#endif
  1775. X#include <stdio.h>
  1776. X#include <signal.h>
  1777. X
  1778. X#define    tst(a,b)    (*mode == 'r'? (b) : (a))
  1779. X#define    RDR    0
  1780. X#define    WTR    1
  1781. X#define SPC '\040'            /* ascii space */
  1782. X
  1783. Xstatic    int popen_pid[20];
  1784. Xextern char **environ;
  1785. Xchar **breakargs();
  1786. X
  1787. X/* no-shell popen */
  1788. XFILE *
  1789. Xnshpopen(cmd, mode)
  1790. Xchar *cmd;
  1791. Xchar *mode;
  1792. X{
  1793. X    int p[2];
  1794. X    int myside, hisside, pid;
  1795. X    char **elist;                /* the execv list */
  1796. X
  1797. X    elist = breakargs(cmd);
  1798. X    if (pipe(p) < 0)
  1799. X        return (NULL);
  1800. X    myside = tst(p[WTR], p[RDR]);
  1801. X    hisside = tst(p[RDR], p[WTR]);
  1802. X    if ((pid = vfork()) == 0) {
  1803. X        /* myside and hisside reverse roles in child */
  1804. X        close(myside);
  1805. X        if (hisside != tst(0, 1)) {    /* 0, 1 => stdin, stdout */
  1806. X            dup2(hisside, tst(0, 1));
  1807. X            close(hisside);
  1808. X        }
  1809. X        execve(elist[0], elist, environ);
  1810. X        perror("execv");
  1811. X        _exit(1);            /* bombed execv, child dies */
  1812. X    }
  1813. X    free(elist);                /* discard the broken args */
  1814. X    if (pid == -1) {
  1815. X        close(myside);
  1816. X        close(hisside);
  1817. X        return (NULL);
  1818. X    }
  1819. X    popen_pid[myside] = pid;
  1820. X    close(hisside);
  1821. X    return (fdopen(myside, mode));
  1822. X}
  1823. X
  1824. X/* close for nshpopen */
  1825. Xint *
  1826. Xnshpclose(ptr)
  1827. XFILE *ptr;
  1828. X{
  1829. X#ifdef    BSD4_2
  1830. X    int child, pid, status, omask;
  1831. X
  1832. X    child = popen_pid[fileno(ptr)];
  1833. X    fclose(ptr);
  1834. X#define    mask(s)    (1 << ((s)-1))
  1835. X    omask = sigblock(mask(SIGINT)|mask(SIGQUIT)|mask(SIGHUP));
  1836. X    while ((pid = wait(&status)) != child && pid != -1)
  1837. X        /* empty */;
  1838. X    (void) sigsetmask(omask);
  1839. X    return (int *)(pid == -1 ? -1 : status);
  1840. X#else        /* 2.9 BSD, at least */
  1841. X    register f, r, (*hstat)(), (*istat)(), (*qstat)();
  1842. X    int status;
  1843. X
  1844. X    f = fileno(ptr);
  1845. X    fclose(ptr);
  1846. X    istat = signal(SIGINT, SIG_IGN);
  1847. X    qstat = signal(SIGQUIT, SIG_IGN);
  1848. X    hstat = signal(SIGHUP, SIG_IGN);
  1849. X    while((r = wait(&status)) != popen_pid[f] && r != -1)
  1850. X        ;
  1851. X    if(r == -1)
  1852. X        status = -1;
  1853. X    signal(SIGINT, istat);
  1854. X    signal(SIGQUIT, qstat);
  1855. X    signal(SIGHUP, hstat);
  1856. X    return (int *)(status);
  1857. X#endif    BSD4_2
  1858. X}
  1859. END_OF_FILE
  1860. if test 2253 -ne `wc -c <'maketd/nshpopen.c'`; then
  1861.     echo shar: \"'maketd/nshpopen.c'\" unpacked with wrong size!
  1862. fi
  1863. # end of 'maketd/nshpopen.c'
  1864. fi
  1865. if test -f 'maketd/nshpopen.h' -a "${1}" != "-c" ; then 
  1866.   echo shar: Will not clobber existing file \"'maketd/nshpopen.h'\"
  1867. else
  1868. echo shar: Extracting \"'maketd/nshpopen.h'\" \(113 characters\)
  1869. sed "s/^X//" >'maketd/nshpopen.h' <<'END_OF_FILE'
  1870. X/* nshpopen defines */
  1871. Xextern FILE   *nshpopen();        /* open pipe */
  1872. Xextern int    *nshpclose();        /* close pipe */
  1873. END_OF_FILE
  1874. if test 113 -ne `wc -c <'maketd/nshpopen.h'`; then
  1875.     echo shar: \"'maketd/nshpopen.h'\" unpacked with wrong size!
  1876. fi
  1877. # end of 'maketd/nshpopen.h'
  1878. fi
  1879. if test -f 'maketd/srtunq.h' -a "${1}" != "-c" ; then 
  1880.   echo shar: Will not clobber existing file \"'maketd/srtunq.h'\"
  1881. else
  1882. echo shar: Extracting \"'maketd/srtunq.h'\" \(1244 characters\)
  1883. sed "s/^X//" >'maketd/srtunq.h' <<'END_OF_FILE'
  1884. X/* include file for memory resident unique sorting routines.
  1885. X *
  1886. X * Written & hacked by Stephen Uitti, PUCC staff, ach@pucc-j, 1985
  1887. X * libsrtunq is copyright (C) Purdue University, 1985
  1888. X *
  1889. X * Permission is hereby given for its free reproduction and
  1890. X * modification for non-commercial purposes, provided that this
  1891. X * notice and all embedded copyright notices be retained.
  1892. X * Commercial organisations may give away copies as part of their
  1893. X * systems provided that they do so without charge, and that they
  1894. X * acknowledge the source of the software.
  1895. X */
  1896. X
  1897. X/* database entry */
  1898. Xstruct srtbl {
  1899. X    struct srtbl *srt_prev;        /* parent */
  1900. X    struct srtbl *srt_less;        /* something < srt_str */
  1901. X    struct srtbl *srt_more;        /* something > srt_str */
  1902. X    char srt_str[1];            /* dynamic: 1 for null at EOS */
  1903. X};
  1904. X
  1905. X/* database tag */
  1906. Xtypedef struct srtent {
  1907. X    struct srtbl *srt_top;        /* root of the tree */
  1908. X    struct srtbl *srt_next;        /* pointer for srtget */
  1909. X} SRTUNQ;
  1910. X
  1911. X/* The functions */
  1912. Xvoid    srtinit();            /* init for srtin */
  1913. Xvoid    srtdtree();            /* recursive delete of subtree */
  1914. Xchar   *srtin();            /* insert string - return err */
  1915. Xvoid    srtgti();            /* init for srtgets */
  1916. Xchar   *srtgets();            /* get next string */
  1917. Xvoid    srtfree();            /* free a database */
  1918. END_OF_FILE
  1919. if test 1244 -ne `wc -c <'maketd/srtunq.h'`; then
  1920.     echo shar: \"'maketd/srtunq.h'\" unpacked with wrong size!
  1921. fi
  1922. # end of 'maketd/srtunq.h'
  1923. fi
  1924. if test ! -d 'src' ; then
  1925.     echo shar: Creating directory \"'src'\"
  1926.     mkdir 'src'
  1927. fi
  1928. if test -f 'src/Makefile' -a "${1}" != "-c" ; then 
  1929.   echo shar: Will not clobber existing file \"'src/Makefile'\"
  1930. else
  1931. echo shar: Extracting \"'src/Makefile'\" \(2016 characters\)
  1932. sed "s/^X//" >'src/Makefile' <<'END_OF_FILE'
  1933. X# Makefile for Ease Translator (et).
  1934. X#
  1935. X#    $Header: /usr/src/local/etc/ease/RCS/Makefile,v 1.4 85/10/29 22:57:06 jss Exp $
  1936. X#
  1937. X#    James S. Schoner, Purdue University Computing Center,
  1938. X#              West Lafayette, Indiana  47907
  1939. X#
  1940. X#    Copyright (c) 1985 by Purdue Research Foundation
  1941. X#
  1942. X#    All rights reserved.
  1943. X#
  1944. X
  1945. XINCLUDE =
  1946. X
  1947. XDEST = /usr/local/etc
  1948. X
  1949. XOWNER = binary
  1950. XGROUP = system
  1951. XMODE = 751
  1952. X
  1953. XDEFS =
  1954. XCFLAGS = -O ${DEFS} ${INCLUDE}
  1955. X
  1956. XLP = lpr
  1957. XLPFLAGS = -J"Ease Source"
  1958. X
  1959. XHDR = symtab.h
  1960. XSRC = main.c emitcf.c errors.c idman.c strops.c symtab.c
  1961. XLST = Makefile lexan.l parser.y ${HDR} ${SRC}
  1962. XDEP = y.tab.c lex.yy.c ${SRC}
  1963. XOBJ = y.tab.o lex.yy.o main.o emitcf.o errors.o idman.o strops.o symtab.o
  1964. X
  1965. Xall: et
  1966. X
  1967. Xet: ${OBJ}
  1968. X    cc ${CFLAGS} -o et ${OBJ} -ll
  1969. X
  1970. Xclean: FRC
  1971. X    rm -f et *.o lex.yy.c y.tab.c y.output yacc.acts yacc.tmp \
  1972. X          lexdefs.h y.tab.h errs Makefile.bak
  1973. X
  1974. Xdepend: ${DEP} ${HDR}
  1975. X    maketd -a ${DEP}
  1976. X
  1977. Xinstall: et FRC
  1978. X    install -c -m ${MODE} -o ${OWNER} -g ${GROUP} -s et ${DEST}
  1979. X
  1980. Xlint:   ${DEP} symtab.h FRC
  1981. X    lint -hxn ${DEP}
  1982. X
  1983. Xprint:  ${LST} FRC
  1984. X    @pr -f ${LST} | ${LP} ${LPFLAGS}
  1985. X
  1986. Xspotless: clean FRC
  1987. X    rcsclean ${LST}
  1988. X
  1989. Xlexdefs.h y.tab.c: parser.y
  1990. X    yacc -d parser.y
  1991. X    -(cmp -s y.tab.h lexdefs.h || cp y.tab.h lexdefs.h)
  1992. X
  1993. Xlex.yy.c: lexan.l
  1994. X    lex lexan.l
  1995. X
  1996. X${HDR} ${SRC} lexan.l parser.y:
  1997. X    co $@
  1998. X
  1999. XFRC:
  2000. X    
  2001. X
  2002. X# DO NOT DELETE THIS LINE - maketd DEPENDS ON IT
  2003. X# Dependencies generated at: Thu Oct 17 14:55:17 EST 1985
  2004. X
  2005. Xemitcf.o: symtab.h
  2006. Xemitcf.o: /usr/include/stdio.h
  2007. Xemitcf.o: emitcf.c
  2008. Xerrors.o: /usr/include/stdio.h
  2009. Xerrors.o: errors.c
  2010. Xidman.o: symtab.h
  2011. Xidman.o: /usr/include/stdio.h
  2012. Xidman.o: idman.c
  2013. Xlex.yy.o: lexdefs.h
  2014. Xlex.yy.o: symtab.h
  2015. Xlex.yy.o: /usr/include/stdio.h
  2016. Xlex.yy.o: lex.yy.c
  2017. Xmain.o: /usr/include/stdio.h
  2018. Xmain.o: main.c
  2019. Xstrops.o: symtab.h
  2020. Xstrops.o: /usr/include/stdio.h
  2021. Xstrops.o: /usr/include/strings.h
  2022. Xstrops.o: strops.c
  2023. Xsymtab.o: symtab.h
  2024. Xsymtab.o: /usr/include/ctype.h
  2025. Xsymtab.o: /usr/include/stdio.h
  2026. Xsymtab.o: symtab.c
  2027. Xy.tab.o: symtab.h
  2028. Xy.tab.o: /usr/include/stdio.h
  2029. Xy.tab.o: y.tab.c
  2030. X
  2031. X# DO NOT ADD ANYTHING HERE - it will go away.
  2032. END_OF_FILE
  2033. if test 2016 -ne `wc -c <'src/Makefile'`; then
  2034.     echo shar: \"'src/Makefile'\" unpacked with wrong size!
  2035. fi
  2036. # end of 'src/Makefile'
  2037. fi
  2038. if test -f 'src/symtab.h' -a "${1}" != "-c" ; then 
  2039.   echo shar: Will not clobber existing file \"'src/symtab.h'\"
  2040. else
  2041. echo shar: Extracting \"'src/symtab.h'\" \(2309 characters\)
  2042. sed "s/^X//" >'src/symtab.h' <<'END_OF_FILE'
  2043. X/*    $Header: /usr/src/local/etc/ease/RCS/symtab.h,v 1.2 85/10/29 23:47:47 jss Exp $    */
  2044. X
  2045. X/*
  2046. X *    symtab.h    -- Definitions related to the "et" symbol table. 
  2047. X *
  2048. X *    author        -- James S. Schoner, Purdue University Computing Center,
  2049. X *                     West Lafayette, Indiana  47907
  2050. X *
  2051. X *    date        -- July 1, 1985
  2052. X *
  2053. X *    Copyright (c) 1985 by Purdue Research Foundation
  2054. X *
  2055. X *    All rights reserved.
  2056. X *
  2057. X */
  2058. X
  2059. X#define TRUE      1
  2060. X#define FALSE     0
  2061. X#define SST       101        /* size of hash table (symbol table)          */
  2062. X#define RSNMAX    5        /* size of a ruleset number character buffer */
  2063. X#define VALRSNMAX 9999        /* max value of ruleset number             */
  2064. X
  2065. X
  2066. X/* identifier types */
  2067. X#define ID_UNTYPED 0
  2068. X#define ID_MACRO   01
  2069. X#define ID_CLASS   02
  2070. X#define ID_RULESET 04
  2071. X#define ID_FIELD   010
  2072. X#define ID_PREC       020
  2073. X#define ID_MAILER  040
  2074. X
  2075. X/* identifier type macros */
  2076. X#define ISTYPED(x) (x|ID_UNTYPED)
  2077. X#define ISMACRO(x) (x&ID_MACRO)
  2078. X#define ISCLASS(x) (x&ID_CLASS)
  2079. X#define ISRULESET(x) (x&ID_RULESET)
  2080. X#define ISFIELD(x) (x&ID_FIELD)
  2081. X#define ISPREC(x) (x&ID_PREC)
  2082. X#define ISMAILER(x) (x&ID_MAILER)
  2083. X
  2084. X/* block definition types */
  2085. Xenum bdefs {def_macro, def_class, def_option, def_prec, def_trusted, 
  2086. X        def_header, def_mailer, def_ruleset};
  2087. X
  2088. X/* option types */
  2089. Xenum opts {opt_A, opt_a, opt_B, opt_c, opt_D, opt_d, opt_e, opt_F, opt_f, 
  2090. X       opt_g, opt_H, opt_i, opt_L, opt_m, opt_N, opt_o, opt_Q, opt_r, 
  2091. X       opt_S, opt_s, opt_T, opt_t, opt_u, opt_v, opt_W, opt_x, opt_X, 
  2092. X       d_opt_i, d_opt_b, d_opt_q,
  2093. X       e_opt_p, e_opt_e, e_opt_m, e_opt_w, e_opt_z};
  2094. X
  2095. X/* flag types */
  2096. Xenum flgs {flg_f, flg_r, flg_S, flg_n, flg_l, flg_s, flg_m, flg_F, flg_D,
  2097. X       flg_M, flg_x, flg_P, flg_u, flg_h, flg_A, flg_U, flg_e, flg_X,
  2098. X       flg_L, flg_p, flg_I, flg_C};
  2099. X
  2100. X/* mailer parameters */
  2101. Xenum mats {mat_path, mat_flags, mat_sender, mat_recipient, mat_argv, 
  2102. X       mat_eol, mat_maxsize};
  2103. X
  2104. Xstruct he {    /* hash entry structure for symbol table node     */
  2105. X    unsigned   idtype;    /* identifier type         */
  2106. X    unsigned   idd;          /* identifier definition flag     */
  2107. X    char      *psb;        /* identifier string buffer     */
  2108. X    union {
  2109. X        char rsn[RSNMAX];     /* ruleset number             */
  2110. X        int prec;          /* precedence value           */
  2111. X        char idc;        /* one char id representation */
  2112. X        char *fstring;        /* field string               */
  2113. X    } idval;
  2114. X    struct he *phe;        /* next hash entry         */
  2115. X};
  2116. END_OF_FILE
  2117. if test 2309 -ne `wc -c <'src/symtab.h'`; then
  2118.     echo shar: \"'src/symtab.h'\" unpacked with wrong size!
  2119. fi
  2120. # end of 'src/symtab.h'
  2121. fi
  2122. echo shar: End of archive 1 \(of 4\).
  2123. cp /dev/null ark1isdone
  2124. MISSING=""
  2125. for I in 1 2 3 4 ; do
  2126.     if test ! -f ark${I}isdone ; then
  2127.     MISSING="${MISSING} ${I}"
  2128.     fi
  2129. done
  2130. if test "${MISSING}" = "" ; then
  2131.     echo You have unpacked all 4 archives.
  2132.     rm -f ark[1-9]isdone
  2133. else
  2134.     echo You still need to unpack the following archives:
  2135.     echo "        " ${MISSING}
  2136. fi
  2137. ##  End of shell archive.
  2138. exit 0
  2139.  
  2140. -- 
  2141.  
  2142. Rich $alz            "Anger is an energy"
  2143. Cronus Project, BBN Labs    rsalz@bbn.com
  2144. Moderator, comp.sources.unix    sources@uunet.uu.net
  2145.